﻿// ===============================================================================
//  Copyright © ymind.net. All rights reserved .
//  官方网站：http://ymind.net/
//  版权所有：彦铭工作室 老陈出品
// ===============================================================================

using System.Collections;
using System.Collections.Generic;
using Lcsoft.UrlRewriter.Parsers;
using Lcsoft.UrlRewriter.Utilities;

namespace Lcsoft.UrlRewriter.Configuration
{
	/// <summary>
	/// 为先决条件解析器提供容器。无法继承此类。
	/// </summary>
	public sealed class ConditionParserPipeline : IEnumerable<IRewriteConditionParser>
	{
		private readonly HashSet<IRewriteConditionParser> _parsers = new HashSet<IRewriteConditionParser>();

		#region IEnumerable<IRewriteConditionParser> Members

		/// <summary>
		/// 返回一个循环访问集合的枚举器。
		/// </summary>
		/// <returns>可用于循环访问集合的 <see cref="IEnumerator"/>。</returns>
		public IEnumerator<IRewriteConditionParser> GetEnumerator() { return this._parsers.GetEnumerator(); }

		/// <summary>
		/// 返回一个循环访问集合的枚举器。
		/// </summary>
		/// <returns>可用于循环访问集合的 <see cref="IEnumerator"/> 对象。</returns>
		IEnumerator IEnumerable.GetEnumerator() { return this._parsers.GetEnumerator(); }

		#endregion

		/// <summary>
		/// 将指定的解析器类型字符串中包含的 <see cref="IRewriteConditionParser"/> 对象添加到容器中。
		/// </summary>
		/// <param name="parserType">包含 <see cref="IRewriteConditionParser"/> 对象类型信息的字符串。</param>
		public void AddParser(string parserType) { this.AddParser(TypeHelper.Activate<IRewriteConditionParser>(parserType, null)); }

		/// <summary>
		/// 将 <see cref="IRewriteConditionParser"/> 对象添加到容器中。
		/// </summary>
		/// <param name="parser"><see cref="IRewriteConditionParser"/> 对象。</param>
		public void AddParser(IRewriteConditionParser parser) { this._parsers.Add(parser); }
	}
}
